/**
 * 是否为对象
 * @param obj
 * @returns {boolean}
 */
export function isObject(obj) {
  return obj !== null && typeof obj === "object";
}

/**
 * 重置对象属性值
 * @param obj 要重置的对象
 * @param callback 回调函数
 */
export function resetObj(obj, callback = undefined) {
  if (isObject(obj)) {
    if (obj instanceof Array) {
      return;
    }
    Object.keys(obj).forEach((key) => {
      if (obj[key] instanceof Array) {
        obj[key] = [];
      } else {
        obj[key] = "";
      }
    });
    if (callback && typeof callback === "function") {
      callback();
    }
  }
}

/**
 * 复制两个对象之间的相同属性的属性值
 * @param target
 * @param source
 */
export function copyObjectVal(target, source) {
  if (!isObject(target) || !isObject(source)) {
    console.warn("target or source must be a plain object");
    return;
  }
  Object.keys(target).forEach((key) => {
    if (source[key] !== null && source[key] !== undefined) {
      target[key] = source[key];
    }
  });
}
//防抖的函数
export function debounce(func, wait, immediate) {
  let timeout;
  return function () {
    //这里利用了闭包
    clearTimeout(timeout);

    if (immediate) {
      //立即执行
      const callNow = !timeout;
      //如果是第一次点的话，timeout是没有值的

      timeout = setTimeout(function () {
        timeout = null;
      }, wait);

      if (callNow) {
        func();
      }
    } else {
      //不会立即执行
      timeout = setTimeout(func(), wait);
    }
  };
}
